Guava লাইব্রেরি Futures ক্লাসের মাধ্যমে ফিউচার এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এর কাজ সহজ করে তোলে। Futures.transform() এবং Futures.addCallback() দুটি গুরুত্বপূর্ণ মেথড যা আসিঙ্ক্রোনাস অপারেশনগুলির সাথে কাজ করার জন্য ব্যবহৃত হয়। এগুলি বিশেষ করে ডেটা প্রসেসিং এবং অ্যাসিঙ্ক্রোনাস অপারেশনগুলিতে ফলাফল প্রাপ্তি এবং প্রতিক্রিয়া ব্যবস্থাপনা সহজ করে।
Futures.transform() এর ধারণা
Futures.transform() একটি মেথড যা একটি ফিউচার (Future) এর ফলাফলকে প্রসেস করার জন্য ব্যবহার করা হয়। এটি একটি ফাংশন গ্রহণ করে, যা ফিউচার এর ফলাফল পাওয়ার পর প্রয়োগ করা হয় এবং একটি নতুন ফিউচার রিটার্ন করে।
এই মেথডটি সাধারণত সেই ক্ষেত্রে ব্যবহার করা হয় যখন আপনি একটি ফিউচারের ফলাফল নিয়ে কিছু কার্যকরী কাজ করতে চান এবং সেই কাজটি সম্পন্ন হওয়ার পর নতুন একটি ফিউচার তৈরির প্রয়োজন হয়।
Futures.transform() ব্যবহার
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
public class FuturesTransformExample {
public static void main(String[] args) throws Exception {
ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
// একটি ফিউচার তৈরি করা
ListenableFuture<Integer> future = executorService.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return 10;
}
});
// Futures.transform() ব্যবহার করে ফিউচারের মান পরিবর্তন করা
ListenableFuture<String> transformedFuture = Futures.transform(future, result -> "Transformed result: " + (result * 2));
// ফলাফল প্রাপ্তি
System.out.println("Transformed Result: " + transformedFuture.get());
executorService.shutdown();
}
}
আউটপুট:
Transformed Result: Transformed result: 20
উপরের কোডে, প্রথমে একটি ফিউচার তৈরি করা হয়েছে যা একটি সংখ্যা ১০ রিটার্ন করবে। তারপর Futures.transform() ব্যবহার করে আমরা সেই সংখ্যাটির সাথে গুণফল (multiplication) করে নতুন একটি ফিউচার তৈরি করেছি।
Futures.addCallback() এর ধারণা
Futures.addCallback() মেথডটি একটি ফিউচার কমপ্লিশন রেকগনাইজার হিসেবে কাজ করে, যেখানে ফিউচারটির কাজ শেষ হওয়ার পর একাধিক কলব্যাক ফাংশন চালু করা হয়। এটি দুটি পারামিটার নেয়: একটিই SuccessCallback, যা সফল হলে চলে, এবং একটিই FailureCallback, যা কোনো ত্রুটি ঘটলে চলে। এটি ListenableFuture এর জন্য ব্যবহৃত হয়।
এই মেথডটি ব্যবহৃত হয় যখন আপনি ফিউচারের কাজ সফল হলে একটি নির্দিষ্ট কাজ করতে চান এবং যদি কোনো ত্রুটি ঘটে তাহলে তার প্রতিক্রিয়া করতে চান।
Futures.addCallback() ব্যবহার
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.FutureCallback;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
public class FuturesAddCallbackExample {
public static void main(String[] args) {
ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
// একটি ফিউচার তৈরি করা
ListenableFuture<Integer> future = executorService.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
// একটি নম্বর রিটার্ন করা
return 42;
}
});
// Futures.addCallback() ব্যবহার করে সফল এবং ত্রুটির ক্ষেত্রে কলব্যাক করা
Futures.addCallback(future, new FutureCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
System.out.println("Success! Result: " + result);
}
@Override
public void onFailure(Throwable t) {
System.err.println("Failure: " + t.getMessage());
}
}, executorService);
executorService.shutdown();
}
}
আউটপুট:
Success! Result: 42
উপরের কোডে, একটি ফিউচার তৈরি করা হয়েছে যা একটি ইন্টিজার মান 42 রিটার্ন করবে। এরপর, Futures.addCallback() ব্যবহার করে আমরা সফল হলে একটি SuccessCallback এবং ত্রুটির ক্ষেত্রে একটি FailureCallback দিয়ে ফিউচারের ফলাফল প্রসেস করেছি।
Futures.transform() এবং Futures.addCallback() এর তুলনা
| ফিচার | Futures.transform() | Futures.addCallback() |
|---|---|---|
| উদ্দেশ্য | ফিউচারের মান পরিবর্তন বা প্রসেস করা | ফিউচারের ফলাফল পাওয়ার পর সফল বা ব্যর্থ কলব্যাক করা |
| প্রক্রিয়া | একটি নতুন ফিউচার রিটার্ন করে | একটি কলব্যাক অ্যাড করা, যা সফল বা ব্যর্থ হলে ট্রিগার হয় |
| ব্যবহারের ধরন | একক অপারেশন প্রসেস করার জন্য | সফল বা ব্যর্থ ফলাফল গ্রহণ এবং প্রতিক্রিয়া জানানো |
সারাংশ
Guava লাইব্রেরির Futures.transform() এবং Futures.addCallback() মেথড দুটি ফিউচার এর সাথে কাজ করার জন্য ব্যবহৃত হয়। Futures.transform() একটি ফিউচার থেকে নতুন একটি ফিউচার তৈরি করে, যেখানে আপনি কোনো মান পরিবর্তন বা প্রসেস করতে পারেন। অন্যদিকে, Futures.addCallback() ফিউচারের ফলাফল পাওয়ার পর সফল বা ব্যর্থ হওয়ার ক্ষেত্রে কলব্যাক অ্যাড করতে ব্যবহৃত হয়, যা অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের জন্য উপকারী। দুটি মেথডই অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের কার্যকারিতা বৃদ্ধি করে এবং কাজের ফ্লো আরও সহজ এবং কার্যকরী করে।
Read more